home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / cstdio.arc / SRC.ARC / FILLBUF.C < prev    next >
C/C++ Source or Header  |  1984-07-28  |  848b  |  40 lines

  1. /*    fillbuf.c - fill file buffer.
  2.     K & R page 168.
  3.     Entered - G. R. Mansfield.  84/06/08.
  4.     Ver 1.1-4728.
  5. */
  6.  
  7. #include <stdio.h>
  8.  
  9. int _fillbuf(fp) /* allocate and fill input buffer */
  10. register FILE *fp;
  11. {
  12.     static char c, *p;
  13.     char *malloc();
  14.     int l;
  15.  
  16.     if ((fp->_flag & _READ) == 0 || (fp->_flag & (_EOF | _ERR)) != 0)
  17.         return(EOF);
  18.     if (fp->_base == NULL)    /* find buffer space */
  19.         if (fp->_flag & _UNBUF)    /* unbuffered */
  20.             fp->_base = &c;
  21.         else if ((fp->_base = malloc(BUFSIZE, 1)) == NULL) {
  22.             wcs("no buffer space for file\n");
  23.             exit(2);
  24.         }    
  25.  
  26.     fp->_ptr = fp->_base;
  27.     l = fp->_flag & _UNBUF ? 1 : BUFSIZE;
  28.     fp->_cnt = read(fp->_fd, fp->_ptr, l);
  29.     if (--fp->_cnt < 0) {
  30.         if (fp->_cnt == -1)
  31.             fp->_flag |= _EOF;
  32.         else
  33.             fp->_flag |= _ERR;
  34.         fp->_cnt = 0;
  35.         return(EOF);
  36.     }
  37.  
  38.     return(*fp->_ptr++);
  39. }
  40.